#!/usr/bin/env bash
#-----------------------------------------------
# Author : hpy
# Emal   : yuan_hp@qq.com
#
# auto run some file! for example bash,fish,tcl,
# python, cpp, gnuplot and so on 
#-----------------------------------------------
#UFUNCTION=自动搜索执行脚本
dst=$(date +%Y%m%d%H%M%S.mgo) #临时文件

if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-help" ]]  ; then 
cat<<EOF
	$(basename $0) -v 1.0 
	Usage: $(basename $0) [filename]
	$(basename $0)			
		当前路径下存在run、run.sh或者run.fish则执行，否则寻找最近修改文件所在路径，
		若存在run、run.sh或者run.fish则执行，否则直接尝试执行最近修改的文件!
	$(basename $0) filename 
		尝试执行filename文件
EOF
exit 0
fi 

function main(){
    DefautRun $*
    test ! -f $1 && echo "不存在 $1 文件" | cat && exit
	cd $(dirname $1)
	file_name=$(basename $1)
    ReadFileType $file_name | cat  #cat显示是为了在win上不乱码
}

#带有参数，则识别第一个参数，并根据文件不同类型选择后续操作
function ReadFileType(){ 
    case $1 in 
        *.sh | *.fish | *.pl | *.tcl | *.tk | *.py | *.lua | *.awk | *.rb)  chmod +x $1 && ./$1 ;; 
		*.c) gcc -o $dst $1 && chmod +x $dst && ./$dst|cat;;
		*.cpp)g++ -std=c++11 -o $dst $1 && chmod +x $dst && ./$dst;;
        *.go ) go build -o $dst $1 && chmod +x $dst &&  ./$dst ;;
        *.plt) gnuplot $1 ;;   #gnuplot
		*.m) dst=$(basename $1) && dst=${dst%%.*}&& matlab -nosplash -nodesktop -r $dst ;;  #matlab文件
		*.dot | *.gv ) dot -Tpng -o t.png $1 ;; #dot gv文件
        * ) echo "Fuck! I don't konw what it is!" ;;
    esac

    test -f $dst && rm $dst &>/dev/null
}

#当不带参数输入时 找run或者run.sh,run.fish文件运行,还是没有则寻找当前路径下最近1分钟发修改的文件，然后再次寻找
function DefautRun(){
    if [ -z $* ] ;then
        if [ -f run ] ;then
			echo "真实执行路径:$(pwd)"
            chmod +x run
            ./run
        elif [ -f run.sh ] ; then 
			echo "真实执行路径:$(pwd)"
            chmod +x run.sh
            ./run.sh
		elif [ -f run.fish ] ; then 
			echo "真实执行路径:$(pwd)"
			chmod +x run.fish
			./run.fish 
        else 
            #当前路径下没有这些文件，那么搜索当前终端下最近一分钟修改的文件
			src=$(find . -type f -mmin 1 | xargs ls -ta |head -n +1)
			if [ ${#src} -gt 0 ] ; then 
				fid=$(readlink -f $src)
				pdir=$(dirname $src)
				fid=$(basename $src)
				cd $pdir 
				if [ -f run ] ; then 
					echo "真实执行路径:$(pwd)"
					chmod +x run
					./run 
					exit 0
				elif [ -f run.sh ] ; then 
					echo "真实执行路径:$(pwd)"
					chmod +x run.sh
					./run.sh
					exit 0
				elif [ -f run.fish ] ; then
					echo "真实执行路径:$(pwd)"
					chmod +x run.fish
					./run.fish
					exit 0 
				else
					echo "尝试执行文件:$src"
					ReadFileType $fid 
					exit 0
				fi

			fi 
            echo "Fuck! Fuck! No parameters, no run file or run.sh file, what do you want?"
        fi
        exit 0
    fi
}

main $*

